/**
 * 解析 JWT Token，提取 Payload 信息
 * @param token - JWT Token 字符串
 * @returns 解析后的 Payload 对象（含 exp 等字段）
 */
export function parseJwtToken(token: string): { exp?: number } {
  try {
    // JWT 第二部分是 Payload，Base64 解码
    const payloadBase64 = token.split('.')[1];
    // Base64 解码（处理 URL 安全编码）
    const payloadStr = decodeURIComponent(
      atob(payloadBase64.replace(/-/g, '+').replace(/_/g, '/'))
        .split('')
        .map(c => `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`)
        .join('')
    );
    return JSON.parse(payloadStr);
  } catch (error) {
    console.error('解析 Token 失败：', error);
    return {}; // 解析失败返回空对象
  }
}

/**
 * 判断 JWT Token 是否过期
 * @param token - JWT Token 字符串
 * @param offsetSeconds - 偏移秒数（提前 N 秒判定过期，避免网络延迟）
 * @returns true=已过期，false=未过期
 */
export function isTokenExpired(token: string, offsetSeconds = 60): boolean {
  if (!token) {
    return true; // 无 Token 视为过期
  }

  const payload = parseJwtToken(token);
  if (!payload.exp) {
    return true; // Token 无 exp 字段视为过期
  } 

  // 转换时间戳：exp（秒）→ 毫秒，当前时间（毫秒）
  const expTimestamp = payload.exp * 1000;
  const currentTimestamp = Date.now();

  // 提前 offsetSeconds 秒判定过期（如提前 60 秒，避免请求时刚好过期）
  return currentTimestamp >= expTimestamp - offsetSeconds * 1000;
}